import pandas as pd
import os
import tkinter as tk
from datetime import datetime


class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.master.title("Excel文件合并工具")

        self.label_input = tk.Label(self, text="输入文件绝对路径:")
        self.label_input.pack()

        self.entry_input = tk.Entry(self)
        self.entry_input.pack()

        self.merge_button = tk.Button(self)
        self.merge_button["text"] = "合并Excel文件"
        self.merge_button["command"] = self.merge_excel_files
        self.merge_button.pack()

        self.label_output = tk.Label(self, text="输出:")
        self.label_output.pack()

        self.text_output = tk.Text(self)
        self.text_output.pack()

    def merge_excel_files(self):
        # 你的合并Excel文件的代码
        # 使用 self.entry_input.get() 获取输入的文件路径
        # 使用 self.text_output.insert(tk.END, "Some text") 在输出框中添加文本
        # 获取所有 Excel 文件的文件名
        pwd = self.entry_input.get() or os.getcwd()
        excel_files = [
            os.path.join(pwd, file)
            for file in os.listdir(".")
            if file.endswith(".xlsx") or file.endswith(".xls")
        ]

        # 创建一个新的 Excel writer 对象
        # 获取当前的日期和时间
        now = datetime.now()

        # 转换为特定格式的字符串
        now_str = now.strftime("%Y-%m-%d_%H-%M-%S")
        writer = pd.ExcelWriter(f"数据汇总{now_str}.xlsx", engine="openpyxl")
        # 对于每个文件
        for excel_file in excel_files:
            self.text_output.insert(tk.END, excel_file + "\n")

            # 读取文件内容
            df = pd.read_excel(excel_file)

            # 获取文件名（不包括扩展名）作为工作表名称
            # 使用 os.path 获取文件名（不包括扩展名）
            sheet_name = os.path.splitext(os.path.basename(excel_file))[0]

            # 将数据写入新的 Excel 文件中的一个新工作表中
            df.to_excel(writer, sheet_name=sheet_name, index=False)

        # 保存新的 Excel 文件
        writer.close()


root = tk.Tk()
app = Application(master=root)
app.mainloop()
